home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 101-125 / scopedisk113 / arexx / checkboot.rexx < prev    next >
OS/2 REXX Batch file  |  1995-03-19  |  5KB  |  143 lines

  1.  
  2. /*     This function is one I use in my automatic checking and moving when I
  3. unwarp a new file. All these functions combined allow me to just type
  4. fixdisk (drive) and it will check for a good boot block and modify the
  5. startup-sequence. In essence, it tells if the disk is bootable. If it
  6. doesn't have a startup-sequence, it asks if you want to de-install the disk.
  7. It will also verify that the boot block is a standard 1.2/1.3 boot block,
  8. and if not, gives the opportunity to save the questionable block and install
  9. a 1.2/1.3 boot block. This function also calls another function which
  10. gets the actual name of the disk. It only calls this function if you elect
  11. to save the non-standard bootblock for further study.
  12.  
  13. /******************* BOOTCK.rexx ********************************/
  14. /* bootck.rexx Checks floppies for viruses & saves a irregualr block */
  15. no_boot = 'No bootblock installed'
  16. real_boot = 'ARP thinks OK bootblock' /* this is arp's msg on OK bootblock */
  17. YES   = 1
  18. NO    = 0
  19. STARTUP_SEQ = NO
  20. SAVE        = 0
  21. BOOT        = 1
  22. NOBOOT      = 2
  23. WriteProtect = TRUE              /* I disk write protect status */
  24.  
  25. arg vol                          /* gotta enter a volume name */
  26. vol = upper(vol)
  27.  
  28. if length(vol) < 4 then do
  29.     say "  You GOTTA Enter A Disk to check !!"
  30.     exit
  31.     end
  32.  
  33. select
  34.     when compare(vol,'DF0:') = 0 then call fixit
  35.     when compare(vol,'DF1:') = 0 then call fixit
  36.     /* if you have df2: and df3: un - comment the below */
  37.     /* when compare(vol,'DF2:') = 0 then call fixit */
  38.     /* when compare(vol,'DF3:') = 0 then call fixit */
  39.     otherwise say 'Drive Name Entry Error'
  40.     end
  41. exit
  42.  
  43.  
  44.                 /* CHECK FOR NON STANDARD BOOT BLOCK */
  45. ""'install 'vol 'check | execio  for 1 var boot_ck'
  46.  
  47.                 /* CHECK FOR EXISTANCE OF STARTUP-SEQUENCE */
  48. if exists(vol's/startup-sequence') then STARTUP_SEQ = YES
  49.  
  50. /* * * * * * * * * * STARTUP-SEQUENCE NOT FOUND ON DISK * * * * * * * * * */
  51. if STARTUP_SEQ == NO then do
  52.     if compare(boot_ck,no_boot) == 0 then do             /* no boot block */
  53.         say 'no startup-sequence,no boot block'
  54.         exit
  55.         end
  56.  
  57.     if compare(boot_ck,real_boot) ~= 0 then do       /* boot non standard */
  58.         say 'there is NO startup-sequence BUT'
  59.         say 'There is a Non-Standard Boot Block'
  60.         call yes_no 'DE-Install 'vol '?'
  61.         if result == YES then call install_disk NOBOOT  /* DE-INSTALL   ? */
  62.         else say "Okay but it might Be A Virus !!"
  63.         exit
  64.         end
  65.  
  66.     else if compare(boot_ck,real_boot) == 0 then do
  67.         say 'there is NO startup-sequence BUT'
  68.         say 'there is a VALID Boot block'               /* DE-INSTALL   ? */
  69.         call yes_no 'De-Install 'vol '?'
  70.         if result == YES then call install_disk NOBOOT
  71.         exit
  72.         end
  73.     end
  74.  
  75. /* * * * * * * * * *  STARTUP-SEQUENCE LOCATED ON DISK * * * * * * * * * */
  76. if STARTUP_SEQ == YES then do
  77.     if compare(boot_ck,no_boot) == 0 then do            /* no boot block */
  78.         say 'there is a startup-sequence on this disk'
  79.         say 'but No boot block is installed'
  80.         call yes_no 'Install Boot Block on 'vol '?'
  81.         if result = YES then call install_disk BOOT
  82.         end
  83.  
  84.     else if compare(boot_ck,real_boot) ~= 0 then do /* boot non standard */
  85.         say 'there is a startup-sequence BUT'
  86.         say 'Boot Block is non-standard '
  87.         call yes_no 'Install standard Boot Block on 'vol '?'
  88.         if result = YES then call install_disk SAVE    /* save non std ? */
  89.         else say "Ok but it might be a VIRUS .."
  90.         end
  91.  
  92.     end                                                 /* end seq = yes */
  93.  
  94.  
  95. install_disk:
  96. arg bt
  97.  
  98. /* check for a write protected disk */
  99. ""'info 'vol' | execio from 4 for 1 var diskinfo'    /* get info on disk */
  100. if compare(word(diskinfo,7),'Read') == 0 then do
  101.     say 'Disk is write protected !!'
  102.     exit
  103.     end
  104.                 /* DE_INSTALL DISK */
  105. if bt == NOBOOT = 1 then do forever
  106.     ""'install 'vol 'noboot'
  107.     ""'install 'vol 'check | execio  for 1 var boot_ck' /* re-check the disk */
  108.     if compare(boot_ck,no_boot) == 0 then do
  109.         say "NOW UN-BOOTABLE"
  110.         return
  111.         end
  112.      else do
  113.         call yes_no "CAN'T UN-INSTALL THIS DISK !!..Retry ?"
  114.         if result = NO then return
  115.         end
  116.     end
  117.  
  118. if bt == SAVE then do                       /* save non-std */
  119.     call gdname vol      /* calls our other function to get the disk name */
  120.     diskname = '"' || getclip('DNAME') || '"'
  121.  
  122.     /* here we use another PD program to save the bootblock before we
  123.        install a correct BOOTBLOCK */
  124.     say 'saving bootblock to dh1:new/'diskname   /*tell em what U R doing */
  125.     ""'bootback 'vol' dh1:new/'diskname
  126.     ""'filenote dh1:new/'diskname 'bootblock'
  127.     end
  128.  
  129.                     /* INSTALL GOOD BOOT BLOCK */
  130. do forever                         /* use CBM DOC install cmd           */
  131.     ""'install 'vol                                     /* install disk */
  132.     ""'install 'vol 'check | execio  for 1 var boot_ck' /* re check block */
  133.     if compare(boot_ck,real_boot) == 0 then do
  134.         say "Boot Block is now Correct "
  135.         return
  136.         end
  137.  
  138.     else do         /* could not correct bad boot block */
  139.         call yes_no "Error Installing this disk.. RETRY ?"
  140.         if result = NO then return
  141.         end
  142.     end
  143.